package main

import (
	"image/color"
	"image/jpeg"
	"log"
	"os"

	"github.com/fogleman/gg"
)

func addWatermark(inputPath string, outputPath string, text string, angle float64) error {
	// 1. 加载图片
	img, err := gg.LoadImage(inputPath)
	if err != nil {
		return err
	}

	// 2. 创建上下文
	dc := gg.NewContext(img.Bounds().Dx(), img.Bounds().Dy())

	// 3. 绘制原图
	dc.DrawImage(img, 0, 0)

	// 4. 设置字体和颜色
	if err := dc.LoadFontFace("./simfang.ttf", 24); err != nil { // 可适当调整字体大小
		return err
	}
	dc.SetColor(color.RGBA{255, 255, 255, 128}) // 白色半透明

	// 6. 计算水印的数量
	// 水平方向和垂直方向的间距
	horizontalSpacing := 100.0 // 水平方向间距增加到200像素
	verticalSpacing := 100.0   // 垂直方向间距增加到100像素

	// 7. 绘制文本以铺满整个图片
	for y := 0.0; y < float64(dc.Height()); y += verticalSpacing {
		for x := 0.0; x < float64(dc.Width()); x += horizontalSpacing {
			dc.Push()                   // 保存当前状态
			dc.RotateAbout(angle, x, y) // 旋转文本
			dc.DrawString(text, x, y)
			dc.Pop() // 恢复状态
		}
	}

	// 8. 保存输出为 JPEG 格式
	file, err := os.Create(outputPath)
	if err != nil {
		return err
	}
	defer file.Close()

	return jpeg.Encode(file, dc.Image(), &jpeg.Options{Quality: 100})
}

func main() {
	//inputPath := "./input.png" // 输入图片路径
	inputPath := "./101.png"   // 输入图片路径
	outputPath := "output.jpg" // 输出图片路径
	text := "水印文本"             // 水印文本
	angle := 45.0              // 倾斜角度，单位为度

	err := addWatermark(inputPath, outputPath, text, angle)
	if err != nil {
		log.Fatal(err)
	}

	log.Println("水印添加成功，输出路径：", outputPath)
}
